/*
CryptoJS v3.0.2
code.google.com/p/crypto-js
(c) 2009-2012 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
var CryptoJS =
  CryptoJS ||
  (function(h, o) {
    var f = {},
      j = (f.lib = {}),
      k = (j.Base = (function() {
        function a() {}
        return {
          extend: function(b) {
            a.prototype = this;
            var c = new a();
            b && c.mixIn(b);
            c.$super = this;
            return c;
          },
          create: function() {
            var a = this.extend();
            a.init.apply(a, arguments);
            return a;
          },
          init: function() {},
          mixIn: function(a) {
            for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]);
            a.hasOwnProperty("toString") && (this.toString = a.toString);
          },
          clone: function() {
            return this.$super.extend(this);
          }
        };
      })()),
      i = (j.WordArray = k.extend({
        init: function(a, b) {
          a = this.words = a || [];
          this.sigBytes = b != o ? b : 4 * a.length;
        },
        toString: function(a) {
          return (a || p).stringify(this);
        },
        concat: function(a) {
          var b = this.words,
            c = a.words,
            d = this.sigBytes,
            a = a.sigBytes;
          this.clamp();
          if (d % 4)
            for (var e = 0; e < a; e++)
              b[(d + e) >>> 2] |=
                ((c[e >>> 2] >>> (24 - 8 * (e % 4))) & 255) <<
                (24 - 8 * ((d + e) % 4));
          else if (65535 < c.length)
            for (e = 0; e < a; e += 4) b[(d + e) >>> 2] = c[e >>> 2];
          else b.push.apply(b, c);
          this.sigBytes += a;
          return this;
        },
        clamp: function() {
          var a = this.words,
            b = this.sigBytes;
          a[b >>> 2] &= 4294967295 << (32 - 8 * (b % 4));
          a.length = h.ceil(b / 4);
        },
        clone: function() {
          var a = k.clone.call(this);
          a.words = this.words.slice(0);
          return a;
        },
        random: function(a) {
          for (var b = [], c = 0; c < a; c += 4)
            b.push((4294967296 * h.random()) | 0);
          return i.create(b, a);
        }
      })),
      l = (f.enc = {}),
      p = (l.Hex = {
        stringify: function(a) {
          for (var b = a.words, a = a.sigBytes, c = [], d = 0; d < a; d++) {
            var e = (b[d >>> 2] >>> (24 - 8 * (d % 4))) & 255;
            c.push((e >>> 4).toString(16));
            c.push((e & 15).toString(16));
          }
          return c.join("");
        },
        parse: function(a) {
          for (var b = a.length, c = [], d = 0; d < b; d += 2)
            c[d >>> 3] |= parseInt(a.substr(d, 2), 16) << (24 - 4 * (d % 8));
          return i.create(c, b / 2);
        }
      }),
      n = (l.Latin1 = {
        stringify: function(a) {
          for (var b = a.words, a = a.sigBytes, c = [], d = 0; d < a; d++)
            c.push(
              String.fromCharCode((b[d >>> 2] >>> (24 - 8 * (d % 4))) & 255)
            );
          return c.join("");
        },
        parse: function(a) {
          for (var b = a.length, c = [], d = 0; d < b; d++)
            c[d >>> 2] |= (a.charCodeAt(d) & 255) << (24 - 8 * (d % 4));
          return i.create(c, b);
        }
      }),
      q = (l.Utf8 = {
        stringify: function(a) {
          try {
            return decodeURIComponent(escape(n.stringify(a)));
          } catch (b) {
            throw Error("Malformed UTF-8 data");
          }
        },
        parse: function(a) {
          return n.parse(unescape(encodeURIComponent(a)));
        }
      }),
      m = (j.BufferedBlockAlgorithm = k.extend({
        reset: function() {
          this._data = i.create();
          this._nDataBytes = 0;
        },
        _append: function(a) {
          "string" == typeof a && (a = q.parse(a));
          this._data.concat(a);
          this._nDataBytes += a.sigBytes;
        },
        _process: function(a) {
          var b = this._data,
            c = b.words,
            d = b.sigBytes,
            e = this.blockSize,
            f = d / (4 * e),
            f = a ? h.ceil(f) : h.max((f | 0) - this._minBufferSize, 0),
            a = f * e,
            d = h.min(4 * a, d);
          if (a) {
            for (var g = 0; g < a; g += e) this._doProcessBlock(c, g);
            g = c.splice(0, a);
            b.sigBytes -= d;
          }
          return i.create(g, d);
        },
        clone: function() {
          var a = k.clone.call(this);
          a._data = this._data.clone();
          return a;
        },
        _minBufferSize: 0
      }));
    j.Hasher = m.extend({
      init: function() {
        this.reset();
      },
      reset: function() {
        m.reset.call(this);
        this._doReset();
      },
      update: function(a) {
        this._append(a);
        this._process();
        return this;
      },
      finalize: function(a) {
        a && this._append(a);
        this._doFinalize();
        return this._hash;
      },
      clone: function() {
        var a = m.clone.call(this);
        a._hash = this._hash.clone();
        return a;
      },
      blockSize: 16,
      _createHelper: function(a) {
        return function(b, c) {
          return a.create(c).finalize(b);
        };
      },
      _createHmacHelper: function(a) {
        return function(b, c) {
          return r.HMAC.create(a, c).finalize(b);
        };
      }
    });
    var r = (f.algo = {});
    return f;
  })(Math);
var h = CryptoJS,
  i = h.lib.WordArray;
h.enc.Base64 = {
  stringify: function(b) {
    var e = b.words,
      f = b.sigBytes,
      c = this._map;
    b.clamp();
    for (var b = [], a = 0; a < f; a += 3)
      for (
        var d =
            (((e[a >>> 2] >>> (24 - 8 * (a % 4))) & 255) << 16) |
            (((e[(a + 1) >>> 2] >>> (24 - 8 * ((a + 1) % 4))) & 255) << 8) |
            ((e[(a + 2) >>> 2] >>> (24 - 8 * ((a + 2) % 4))) & 255),
          g = 0;
        4 > g && a + 0.75 * g < f;
        g++
      )
        b.push(c.charAt((d >>> (6 * (3 - g))) & 63));
    if ((e = c.charAt(64))) for (; b.length % 4; ) b.push(e);
    return b.join("");
  },
  parse: function(b) {
    var b = b.replace(/\s/g, ""),
      e = b.length,
      f = this._map,
      c = f.charAt(64);
    c && ((c = b.indexOf(c)), -1 != c && (e = c));
    for (var c = [], a = 0, d = 0; d < e; d++)
      if (d % 4) {
        var g = f.indexOf(b.charAt(d - 1)) << (2 * (d % 4)),
          h = f.indexOf(b.charAt(d)) >>> (6 - 2 * (d % 4));
        c[a >>> 2] |= (g | h) << (24 - 8 * (a % 4));
        a++;
      }
    return i.create(c, a);
  },
  _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
};

export function encode(v) {
  v = typeof v === "object" ? JSON.stringify(v) : v;
  try {
    v = CryptoJS.enc.Utf8.parse(v);
    try {
      v = CryptoJS.enc.Base64.stringify(v);
    } catch (error) {}
  } catch (error) {}
  return v;
}
export function decode(v) {
  try {
    v = CryptoJS.enc.Base64.parse(v);
    try {
      v = v.toString(CryptoJS.enc.Utf8);
      try {
        let nv = JSON.parse(v);
        typeof nv === "object" ? (v = nv) : null;
      } catch (e) {}
    } catch (error) {}
  } catch (error) {}
  return v;
}
export default CryptoJS;
